//
//  CLLStatusListViewModel.swift
//  CLWeiNo
//
//  Created by DDC on 2017/10/12.
//  Copyright © 2017年 DDC. All rights reserved.
//

import Foundation
import SDWebImage
class CLLStatusListViewModel {
    
    // 调度组
    let group = DispatchGroup()
    // 创建数据数组
    lazy var statusList = [CLLStatusViewModel]()
    
    // 加载微博信息列表
    ///
    /// - Parameters:
    ///   - pullUp: 是否上拉标志
    ///   - completion: 加载完成回调
    func loadStatus(pullUp:Bool, completion:@escaping (_ isSuccess:Bool)->()) {
        // sinceId 获取第一条信息的id信息
        let sinceId = pullUp ? 0 : (statusList.first?.status.id ?? 0)
        // maxId获取最后一条信息的id信息
        let maxId = !pullUp ? 0 : (statusList.last?.status.id ?? 0)
        
        CLLNetWorkManager.shared.statusList(sinceId: sinceId , maxId: maxId) { (list, isSuccess) in
            
            // 请求失败
            if !isSuccess {
                completion(false)
                
                return
            }
            var array = [CLLStatusViewModel]()
            
            for dict in list ?? [] {
                // 字典转模型
                guard let model = CLLStatus.yy_model(with: dict) else {
                
                    continue
                }
                // 创建视图模型
                array.append(CLLStatusViewModel(model: model))
            }
            
            // print("刷新到\(array.count)条信息\(array)")
            // 上拉加载数据
            if pullUp {
                
                self.statusList += array
            } else {
                
                // 下拉刷新拼接数据
                self.statusList = array + self.statusList
            }
            // 如果是单张图片,缓存单张图片进行等比例缩放
            self.cacheSingleImage(list: array, completion: completion)
        
        }
       
    }
    /// 缓存单张图片--进行等笔记缩放
    func cacheSingleImage(list: [CLLStatusViewModel],completion:@escaping (_ isSuccess:Bool)->()){
        
        // 缓存图片的长度
        var length = 0
        
        for iv in list {
            if iv.picURLs?.count != 1 {
                continue
            }
            // 到此处 ，视图中就只有一张图片了 
            guard let pic = iv.picURLs?[0].thumbnail_pic,
                  let url = URL(string: pic)
            else {
                
                continue
            }
            // sd中下载图片：下载成功之后,会缓存图片到沙盒中
            group.enter()
            SDWebImageManager.shared().loadImage(with: url, options: [], progress: nil, completed: { (image, _, _, _, _, _) in
                
                // 将图片缓存为二进制
                if let image = image ,
                   let data = UIImagePNGRepresentation(image)
                    {
                    
                        length += data.count
                        self.group.leave()
                        // 缓存成功之后更新图片
                        iv.updateSinglePicture(image: image)
                }
            })
            
            group.notify(queue: DispatchQueue.main, execute: {
                
                /// print("缓存的图片的长度为--\(length / 1024)k")
                /// 完成调度,完场回调
                completion(true)
            })
        }
        
    }
    
}
